﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using FlexCel.XlsAdapter;
using System.IO;
using FlexCel.Core;

namespace ParseIvanPost
{
    public partial class Form1 : Form
    {
        private string path = null;
        XlsFile xls = new XlsFile();
        string[,] parsedDoc = null;

        public Form1()
        {
            InitializeComponent();
        }

        //Парсим адресс.
        private void ParseAdress(XlsFile xls)
        {
            int RowCount = xls.RowCount;
            parsedDoc = new string[RowCount, 15]; //Задаём размерность массива, который нужно получить.
            //Проходим циклом по каждому ряду.
            for (int i = 1; i <= RowCount; i++)
            {
                if (xls.GetCellValue(i, 4) == null)
                    continue;
                string BarCode = null;
                if (xls.GetCellValue(i, 2) != null)
                    BarCode = xls.GetCellValue(i, 2).ToString();
                string Weight = null;
                if (xls.GetCellValue(i, 4) != null)
                    Weight = xls.GetCellValue(i, 4).ToString();

                string CurAdress = xls.GetCellValue(i, 5).ToString();
                string[] CurAdressSplit = CurAdress.Split('/');
                if (CurAdressSplit.Length < 9)
                    continue;
                //Записываем величины в нужные ячейки массива.
                parsedDoc[i - 1, 2] = BarCode;
                parsedDoc[i - 1, 3] = "01001";
                parsedDoc[i - 1, 6] = "1";
                parsedDoc[i - 1, 7] = Weight;
                parsedDoc[i - 1, 14] = CurAdressSplit[1] + " " + CurAdressSplit[2] + " " + CurAdressSplit[3] + "" + CurAdressSplit[4] + "" + CurAdressSplit[5] + "" + CurAdressSplit[6];

                if (CurAdressSplit.Length > 9)
                {
                    for (int cur = 7; cur < CurAdressSplit.Length - 1; cur++)
                    {
                        if (parsedDoc[i - 1, 10] == null)
                            parsedDoc[i - 1, 10] = CurAdressSplit[cur];
                        parsedDoc[i - 1, 10] = parsedDoc[i - 1, 10] + " " + CurAdressSplit[cur];
                    }
                    parsedDoc[i - 1, 11] = CurAdressSplit[CurAdressSplit.Length - 1];
                }
                else
                {
                    parsedDoc[i - 1, 10] = CurAdressSplit[7];
                    if (CurAdressSplit[7].Length < 4)
                        parsedDoc[i - 1, 10] = "На коробке";
                    parsedDoc[i - 1, 11] = CurAdressSplit[8];
                }
            }
            bool result = WriteToFile(parsedDoc);
        }

        private bool WriteToFile(string[,] data)
        {
            string pathToSave = Path.GetDirectoryName(path) + "/" + Path.GetFileNameWithoutExtension(path) + "_parsed.xls";
            XlsFile parsedXls = new XlsFile();
            parsedXls.NewFile(3, TExcelFileFormat.v2003);
            parsedXls.ActiveSheet = 1;
            for (int i = 1; i <= data.GetLength(0); i++)
            {
                for (int j = 1; j <= data.GetLength(1); j++)
                {
                    string value = data[i - 1, j - 1];
                    parsedXls.SetCellValue(i, j, value);
                }
            }
            parsedXls.Save(pathToSave);
            return true;
        }

        //Открываем файл экселя.
        private void btOpen_Click_1(object sender, EventArgs e)
        {
            OpenFileDialog f = new OpenFileDialog();
            DialogResult res = f.ShowDialog();
            if (res == DialogResult.OK)
            {
                path = f.FileName;
                xls.Open(path);
            }

            ParseAdress(xls);

        }
    }
}
